package bl.document;

import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import o.财务单据类型;
import po.AccountBookPo;
import po.AccountItemPo;
import po.DocumentPo;
import po.Po;
import po.SystemLogPo;
import po.收付款单po;
import vo.AccountItemVo;
import vo.DocumentVo;
import vo.Vo;
import vo.AccountInAndOutDocumentVo;
import db.document.AccountInAndOutDocumentDB;
import db.history.SystemLogDB;
import dbservice.document.DocumentDBService;
import dbservice.history.SystemLogDBService;

public class AccountInAndOutDocumentBL extends DocumentBL{

	private static final long serialVersionUID = 6905904226903347645L;



public static void main(String[] args) throws SQLException, RemoteException{
	   AccountBookPo book=new AccountBookPo();
	   book.setName("accountbook");
	   DocumentDBService db = new AccountInAndOutDocumentDB(book);
	    AccountInAndOutDocumentBL bl=new AccountInAndOutDocumentBL(db,new SystemLogDB());
	   
	  AccountInAndOutDocumentVo vo=new AccountInAndOutDocumentVo();
	 /*   AccountItemVo item1=new AccountItemVo("3424221994950",1000,"收入1000圆");
	    AccountItemVo item2=new AccountItemVo("3424221994950",2000,"无");
	    List<AccountItemVo> list=new ArrayList<AccountItemVo>();
		list.add(item1);
		list.add(item2);
		vo.set转账列表(list);
		vo.set总额汇总(3000);
		//vo.set操作员("张鹏");
		vo.set客户("王泽浩");*/
		vo.set单据编号("SKD-20141215-00002");
	   // vo.set单据类型(财务单据类型.收款单);
		bl.redRushAndCopy(vo);
	   // bl.add(vo);
	    
		//bl.approve(vo);      //vo需提供单据编号
		
	   /* List<DocumentVo> list2=bl.getUnapproval();
		System.out.println("共有"+list2.size()+"张未审批收款单");
		for(int i=0;i<list2.size();i++){
			System.out.println("第"+(i+1)+"张未审批单据内容如下：");
			System.out.println("单据编号："+list2.get(i).get单据编号());
			System.out.println("操作员姓名："+((收付款单vo) list2.get(i)).get操作员());
			System.out.println("客户姓名："+((收付款单vo) list2.get(i)).get客户());
			System.out.println("总额汇总："+((收付款单vo) list2.get(i)).get总额汇总());
			System.out.println("转账列表：");
			for(int k=0;k<((收付款单vo) list2.get(i)).get转账列表().size();k++)
			System.out.println("银行帐户:"+((收付款单vo) list2.get(i)).get转账列表().get(k).get银行账户()+"，转账金额:"+((收付款单vo) list2.get(i)).get转账列表().get(k).get转账金额()+"，备注："+((收付款单vo) list2.get(i)).get转账列表().get(k).get备注());
			System.out.println("----------------------------------------");
			
		}*/
	   
	    
	    
	    /*DocumentVo to=new  DocumentVo();
	    DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");     
	    Date from_date=null;
		try {
			from_date = df.parse("2014-11-28");
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		from.setDate(from_date);
		from.setType(true);           //type为收款单
		from.set客户("王泽浩");
		try {
			to.setDate(df.parse("2014-11-29"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		to.set客户("王泽浩");
		to.setType(true);
		List<DocumentVo> list2=bl.get(from, to);
		System.out.println("共搜索到"+list2.size()+"张收款单");
		for(int i=0;i<list2.size();i++){
			System.out.println("第"+(i+1)+"张搜索到的单据内容如下：");
			System.out.println("单据编号："+list2.get(i).get单据编号());
			System.out.println("操作员姓名："+((收付款单vo) list2.get(i)).get操作员());
			System.out.println("客户姓名："+((收付款单vo) list2.get(i)).get客户());
			System.out.println("总额汇总："+((收付款单vo) list2.get(i)).get总额汇总());
			System.out.println("转账列表：");
			for(int k=0;k<((收付款单vo) list2.get(i)).get转账列表().size();k++)
			System.out.println("银行帐户:"+((收付款单vo) list2.get(i)).get转账列表().get(k).get银行账户()+"，转账金额:"+((收付款单vo) list2.get(i)).get转账列表().get(k).get转账金额()+"，备注："+((收付款单vo) list2.get(i)).get转账列表().get(k).get备注());
			System.out.println("----------------------------------------");
			
		}
		 */
	    
   }
	
	
	
	public AccountInAndOutDocumentBL(DocumentDBService documentDB,SystemLogDBService log)  throws RemoteException{
		super(documentDB,log);
		// TODO Auto-generated constructor stub
	}


	public AccountInAndOutDocumentVo _vo(收付款单po po){
		   AccountInAndOutDocumentVo vo=new AccountInAndOutDocumentVo();
		      vo.set单据编号(po.get单据编号());
			  vo.set客户(po.get客户());
			  vo.set业务员(po.get业务员());
			 // po.set已审批(vo.is已审批());
			  vo.set总额汇总( po.get总额汇总());
			  vo.set单据类型(po.get单据类型());
			  List<AccountItemVo> list=new ArrayList<AccountItemVo>();
			  for(int i=0;i<po.get转账列表().size();i++){
				  AccountItemVo item = new AccountItemVo();
				  item.set银行账户(po.get转账列表().get(i).get银行账户());
				  item.set转账金额(po.get转账列表().get(i).get转账金额());
				  item.set备注(po.get转账列表().get(i).get备注());
				  list.add(item);
				  
			  }
			  vo.set转账列表(list);
			  
		   return vo;
	   }
	   public 收付款单po _po(AccountInAndOutDocumentVo vo){
		  收付款单po po=new 收付款单po();
		  po.set单据类型(vo.get单据类型());
		  po.set单据编号(vo.get单据编号());
		  po.set客户(vo.get客户());
		  po.setDate(vo.getDate());
		  po.set操作员(vo.getOperator());
		  po.set已审批(vo.is已审批());
		  po.set总额汇总((int) vo.get总额汇总());
		  List<AccountItemPo> list=new ArrayList<AccountItemPo>();
		  for(int i=0;i<vo.get转账列表().size();i++){
			  AccountItemPo item = new AccountItemPo();
			  item.set银行账户(vo.get转账列表().get(i).get银行账户());
			  item.set转账金额(vo.get转账列表().get(i).get转账金额());
			  item.set备注(vo.get转账列表().get(i).get备注());
			  list.add(item);
		  }
		  po.set转账列表(list);
		  return po;
	   }
	   public DocumentPo _po(DocumentVo vo){
		   DocumentPo po=new DocumentPo();
		   po.set客户(vo.get客户());
		   po.setDate(vo.getDate());
		   po.set业务员(vo.get业务员());
		   po.setType(vo.isType());
		   po.set仓库(vo.get仓库());
		   return po;
	   }
	   @Override
		public Vo add(DocumentVo document) {
			Po po=documentDB.add(_po((AccountInAndOutDocumentVo) document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
				log.add(new SystemLogPo(((AccountInAndOutDocumentVo)document).getOperator(), "添加",((AccountInAndOutDocumentVo)document).get单据类型()==财务单据类型.付款单? "付款单":"收款单"));
			}
			else{
			    vo.failed(po.getFailMessage());
			}
			return vo;
		}
		
		@Override
		public Vo approve(DocumentVo document) {
			Po po=documentDB.approve(_po((AccountInAndOutDocumentVo)document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
				log.add(new SystemLogPo(((AccountInAndOutDocumentVo)document).getOperator(), "审批",((AccountInAndOutDocumentVo)document).get单据编号()));
			}else{
				vo.failed(po.getFailMessage());
			}
			return vo;
		}

		

		@Override
		public Vo update(DocumentVo document) {
			Po po=documentDB.update(_po((AccountInAndOutDocumentVo) document));
			Vo vo=new Vo();
			if(po.isSuccessed()){
				vo.successed();
			}
			else{
			    vo.failed(po.getFailMessage());
			}
			return vo;
		}

		@Override
		public List<DocumentVo> get(DocumentVo from, DocumentVo to) {
			List<DocumentPo> po=documentDB.get(_po(from), _po(to));
			List<DocumentVo> vo=new ArrayList<DocumentVo> ();
			for(int i=0;i<po.size();i++){
				vo.add(_vo((收付款单po) po.get(i)));
			}
			return vo;
		}

		@Override
		public List<DocumentVo> getUnapproval() {
			List<DocumentPo> po=documentDB.getUnapproval();
			List<DocumentVo> vo=new ArrayList<DocumentVo> ();
			for(int i=0;i<po.size();i++){
				vo.add(_vo((收付款单po) po.get(i)));
			}
			return vo;
		}

		
		@Override
		public Vo redRush(DocumentVo document) {
			Vo vo =new Vo();
			List<AccountItemVo> list=((AccountInAndOutDocumentVo)document).get转账列表();
			for(int i=0;i<list.size();i++){
				list.get(i).set转账金额(-list.get(i).get转账金额());
			}
			((AccountInAndOutDocumentVo)document).set总额汇总(-((AccountInAndOutDocumentVo)document).get总额汇总());
			Vo r=add(document);
			if(r.isSuccessed()){
				vo.successed();
				log.add(new SystemLogPo(((AccountInAndOutDocumentVo)document).getOperator(), "红冲",((AccountInAndOutDocumentVo)document).get单据编号()));
			}else{
				vo.failed(r.getFailMessage());
			}
			return vo;
		}
		
}
